package com.dog.basics.common.util;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.URLUtil;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;

/**
 * @program: clumsy_security
 * @description: 图片上传工具
 * @author: Guo
 * @create: 2019-04-28 16:02
 **/
public class FileUtils {
    /**
     * 上传新的图片
     *
     * @param file     文件
     * @param path     文件存放路径
     * @param fileName 源文件名
     * @return
     */
    public static boolean upload(MultipartFile file, String path, String fileName) {

        //使用原文件名
        String realPath = path + "/" + fileName;
        File dest = new File(realPath);
        //判断文件父目录是否存在
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdir();
        }
        try {
            //保存文件
            file.transferTo(dest);
            return true;
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        }
    }
    /**
     * 上传固件版本覆盖
     *
     * @param file     文件
     * @param path     文件存放路径
     * @param fileName 源文件名
     * @return
     */
    public static boolean uploadDevice(MultipartFile file, String path, String fileName) {

        //使用原文件名
        String realPath = path + "/" + fileName;
        File dest = new File(realPath);
        //判断文件父目录是否存在
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdir();
        }
        //判断文件是否存在
        if(FileUtil.exist(dest)){
            FileUtil.del(dest);
        }
        try {
            //保存文件
            file.transferTo(dest);
            return true;
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        }
    }

    /**
     *  通过网络URL下载图片保存到本地
     * @param url 网络URL
     * @param path 文件存放路径
     * @param fileName 源文件名
     * @return
     * guonh 2020年7月9日
     */
    public static boolean uploadURL(String url, String path, String fileName) {
        // URL声明
        URL dowUrl = URLUtil.url(url);
        URLConnection con = null;
        // 执行宕取
        try {
            con = dowUrl.openConnection();
            File file = FileUtil.file(StrUtil.format("{}{}", path, fileName));
            FileUtil.writeFromStream(con.getInputStream(), file);
            return Boolean.TRUE;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return Boolean.FALSE;
    }

    /**
     * 删除图片
     *
     * @param fileRealUrl
     * @return
     */
    public boolean removeFile(String fileRealUrl) {
        boolean result = false;
        File file = null;
        if (!StrUtil.isEmpty(fileRealUrl)) {
            file = new File(fileRealUrl);
        } else {
            result = false;
        }
        // 如果文件路径所对应的文件存在，并且是一个文件，则直接删除
        if (file.exists() && file.isFile()) {
            if (!file.delete()) {
                return false;
            }
            result = true;
        }
        return result;
    }
}
